home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / SLTPU70C / WHATS.NEW < prev    next >
Text File  |  1993-09-16  |  22KB  |  489 lines

  1.  
  2. What's New in SLTPU?
  3.  
  4. Version 3.5, September, 1993
  5. ----------------------------
  6. The main new features in Searchlight 3.5 are expanded file descriptions,
  7. file attachments to messages, and new internal RIP support. These changes
  8. affect several of the data files in minor ways, and also result in some
  9. additions to the function suite.
  10.  
  11.  
  12. New CONFIG Switches:
  13.  
  14. Several new CONFIG variables are available. These correspond directly to
  15. new features on the CONFIG program menus:
  16.  
  17.        PrivateAttach: AttribSet;   { Can attach file to private message }
  18.        PublicAttach: AttribSet;    { Can attach file to public message }
  19.        AttachPath: string[45];     { File attach path }
  20.        NoGreeting: boolean;        { If set, disable login greeting }
  21.        MaxFileDescrip: Integer;    { Max. size of file descriptions }
  22.        HighAscii: boolean;         { Support high ascii chars? }
  23.  
  24.  
  25. Binary File Attach:
  26.  
  27. Each message in a Searchlight 3.5 system can have a binary file attached
  28. to it. If a message has a file attachment, the filename is stored in the
  29. message header in this field:
  30.  
  31.        fattach: string[12];  { attached file, if any }
  32.  
  33. Notice that this field stores only a filename, and not a path. The editor
  34. in Searchlight 3.5 will only allow a legal DOS filename to be stored here.
  35. If there is no file attached, this field contains a blank string.
  36.  
  37. In order to access an attached file while reading a message, you need to
  38. also retrieve the "File attach path", which is found in the CONFIG file:
  39.  
  40.        AttachPath: string[45];          { File attach path }
  41.  
  42. By concatenating the attach path with the filename, you can construct a
  43. complete path to the attached file for any message. When attempting to
  44. access an attached file, be sure to build error checking into your code so
  45. that your program doesn't crash in case the file does not exist (for
  46. example, the file may have been manually deleted by the Sysop; this is
  47. considered normal and should not produce an error).
  48.  
  49. When a message that contains a binary file attachment is killed with the
  50. KillMsgId or AutoTrim procedures, the attached file is automatically
  51. deleted (unless the message is a carbon-copy, in which case the file is
  52. deleted when the last copy of the message is deleted).
  53.  
  54. To post a message with a file attachment:
  55.   (1) Copy or move the file into the attach file path (cf.Attachpath)
  56.   (2) Store the filename in the message header (header.fattach)
  57.   (3) Save the message
  58.  
  59. Be sure that the filename placed in the header is a legal DOS filename which
  60. does not contain any pathnames or drive letters.
  61.  
  62. To add a file attachment to an existing message:
  63.   (1) Copy or move the file into the attach file path
  64.   (2) Retrieve the message header of the desired message
  65.   (3) If the message already has a file attachment, delete the file
  66.   (4) Store the new filename in the header, and save the header
  67.  
  68. A boolean field called 'Fretain' is included in the message header. If set
  69. to True, the kill functions will not delete the attached file. Set this
  70. field only in special circumstances where you want to delete a message, but
  71. retain the attached file.
  72.  
  73.  
  74. Long File Descriptions:
  75.  
  76. Each file in Searchlight 3.5 can have an "extended" file description of
  77. up to 400 lines associated with it. Searchlight stores these extended
  78. descriptions by creating a new file for each directory -- the new file
  79. ends with the extension '.EDF', and is stored in the same place as the
  80. directory's .SL2 file. The .EDF file stores text in the same format as a
  81. subboard .MSG file, including text compression, and is therefore a highly
  82. efficient way of storing file descriptions of varying lengths. The .EDF
  83. file is created automatically when a directory is opened, if it does not
  84. already exist.
  85.  
  86. An extended file description is indicated by a pointer in the message header:
  87.  
  88.        EdfTxt: longint;        { pointer to extended description }
  89.  
  90. If this pointer is nonzero, it indicates that an extended description exists
  91. for the file. The following new functions are included in the DIR unit for
  92. handing extended descriptions:
  93.  
  94. Procedure GetDescription (d: longint; var msg: msgptr);
  95.  Function SaveDescription (msg: msgptr): longint;
  96. Procedure KillDescription (d: longint);
  97.  
  98. Notice that extended descriptions are saved and retrieved into variables of
  99. type MsgPtr -- the same type of variable that is used for storing and
  100. reading messages. To get an extended file description, call GetDescription
  101. with the EdfTxt pointer and an uninitialized variable of type msgptr:
  102.  
  103.   GetDescription(filerecord.edftxt,msg);
  104.  
  105. The resulting message variable contains the text of the extended description.
  106. For more details about the MsgPtr type, see examples of retrieving messages
  107. in the FILEDEF.REF document and the sample programs.
  108.  
  109. Note: Check to see if the MsgPtr variable is Nil after a call to this
  110. function; if so, proceed as though no description is available. The call
  111. could return a nil value if the EdfTxt pointer contained garbage, such
  112. as if the record was saved by a program which was not aware of this pointer
  113. and did not clear its value to zero before saving the record.
  114.  
  115. Remember to dispose of the extended description text when you are done with
  116. it, by calling the DisposeMsg function. This frees the memory used to store
  117. the description text.
  118.  
  119. The SaveDescription function stores an extended file description in the
  120. directory's EDF file. Pass the function a variable of type MsgPtr that has
  121. been built to contain the description text. The result is a pointer, which
  122. should be loaded directly into the message header. Note that this function
  123. allows you to handle description texts separately from files: it is up to
  124. you to make sure you manage the descriptions and files together. The correct
  125. way to add a file to the Searchlight directory with an extended description:
  126.  
  127.   (1) Create the data record for the file and the description text.
  128.   (2) Save the description text with the SaveDescription function. Store
  129.       the result in the EdfTxt field of the data record.
  130.   (3) Add the data record to the directory file (AddFile function).
  131.  
  132. The KillDescription function is necessary only if you wish to edit an
  133. existing extended description. It's not necessary to explicitly call this
  134. function before deleting a file, because the DeleteFile function calls it
  135. if necessary. When editing a file with an extended description, the proper
  136. procedure is:
  137.  
  138.   (1) Load the old description into memory and edit it.
  139.   (2) Kill the old description with the KillDescription function.
  140.   (3) Save the modified description with SaveDescription. Store the
  141.       result of the function in the file's data record.
  142.   (4) Save the file's data record back to disk (so that the updated
  143.       pointer is saved).
  144.  
  145. If you are replacing the description with something completely new, then
  146. there is no need to load the old description.
  147.  
  148. Note: If you are saving or adding a file without an extended description,
  149. be sure to store a value of 0 in the EdfTxt field.
  150.  
  151. Old vs. New descriptions: Searchlight 3.5 still uses the "short" file
  152. description (40 character description in the message header). The old
  153. two-line extended description (field 'Edescrip') is no longer used to
  154. store descriptions, but is supported when reading old directories. In order
  155. to maintain compatibility with both old and new directory formats:
  156.  
  157.   (1) When reading files, check for an extended description in EdfTxt
  158.       first. If one is present, use it, and ignore the contents of the
  159.       old Edescrip fields.
  160.  
  161.   (2) When saving or updating files, always store extended descriptions with
  162.       the SaveDescription function, not in the Edescrip fields. Do this even
  163.       if the extended description is only one or two lines. If updating an
  164.       old entry, copy the data from the Edescrip field into a MsgPtr type
  165.       variable, and re-save it as an extended description.
  166.  
  167. Note: See SAMPLE6.PAS for an example of working with long descriptions.
  168.  
  169.  
  170. RIP Style Definitions:
  171.  
  172. Searchlight 3.5 introduces a new data file, RIPSTYLE.SL2. This file stores
  173. the RIP styles, as defined in the CONFIG program. It also stores the RIP
  174. General Setup information from the CONFIG program.
  175.  
  176. Two new files are included with the SLTPU library to support RIP styles:
  177.  
  178.   STYLEDEF.TPU
  179.   STYLEDEF.REF
  180.  
  181. The STYLEDEF unit file defines data types for the RIP style records. It
  182. also contains procedures for opening and closing the RIPSTYLE.SL2 file and
  183. managing a stack of styles in use. STYLEDEF.REF is a reference file that
  184. contains the actual record layout and type definitions managed by the
  185. function calls.
  186.  
  187. For more information about STYLEDEF.TPU, see the SLTPU.REF file included
  188. in this archive.
  189.  
  190.  
  191.  
  192. Version 3.0, March, 1993
  193. ------------------------
  194. Searchlight 3.0 adds new functions to the modem interface including a string
  195. output function. See MODEM.PAS and MODEM.DOC for more information.
  196.  
  197. Searchlight 3.0 adds Netmail support to Searchlight, as well as other
  198. changes to the file structures. Note that none of the files has changed size
  199. and no existing fields have changed location; therefore, programs written
  200. for Searchlight 2.15 and 2.25 remain compatible with Searchlight 3.0 (the
  201. only exception to this are programs that access the external protocol
  202. definitions; see note below).  
  203.  
  204. The data structure changes between version 2.25 and 3.0 are outlined here 
  205. for your convenience.
  206.  
  207.  
  208. Type Definitions:
  209.  
  210.      RSbaud = (B110,B150,B300,B600,B1200,B2400,B4800,B9600,B19200,B38400,
  211.                b7200,b12000,b14400,b16800);
  212.  
  213. The RSBaud type is extended to include support for additional baud rates. 
  214. Notice that the new rates are added to the end of the type; therefore the 
  215. ordinal numbers for B9600, B19200 and B38400 are unchanged. However, be 
  216. alert to the fact that less-than or greater-than comparisons based on the 
  217. ordinal values won't produce the expected results; in other words, if B1 
  218. equals B14400 and B2 equals B19200, the expression "if B1<B2" will produce 
  219. FALSE, since the ordinal value of B14400 is greater than the ordinal value 
  220. of B19200.
  221.  
  222.  
  223.      ProtocolType = (Extern,XSUM,XCRC,X1K,ZMODEM);
  224.      ExProtocol = record
  225.        name: string[40];      { protocol name }
  226.        sendcmd: string[72];   { send command }
  227.        rcvcmd: string[72];    { receive command }
  228.        source: ProtocolType;  { type of protocol }
  229.        extra: string[19];     { expansion room }
  230.      end;
  231.  
  232. The structure for protocol types has a new "source" value added to it. This 
  233. allows protocols defined in the CONFIG file to be either internal or 
  234. external protocols. By default, existing external protocols are assigned 
  235. "Extern" as the source type.
  236.  
  237. See the note below with reference to the 'Proto' variable in the CONFIG 
  238. file.
  239.  
  240.  
  241.      AutoDoorType = record   { automatic door }
  242.        command: string[60];
  243.        directory: string[60];
  244.        commtype: byte;
  245.        abort: byte;
  246.        writeprot: boolean;
  247.        dropfile: byte;   { 0=None 1=PCB14 2=PCB12 3=DOOR.SYS 4=DORINFOx.DEF }
  248.        pause: boolean;   { pause after door executes? }
  249.        extra: string[8];
  250.      end;
  251.  
  252. The AutoDoor type is mostly unchanged. Note that the 'dropfile' type has new
  253. values corresponding to the new formats available in Searchlight 3.0.
  254.  
  255.  
  256.      FidoAddressType = record
  257.        node,net,zone,point: word;
  258.      end;
  259.  
  260.      AddressType = record    { message address information }
  261.        data: string[40];   { address data }
  262.        atype: byte;        { 0=forward 1=incoming netmail 2=outgoing netmail }
  263.      end;
  264.  
  265. 'FidoAddressType' is used to record the default fidonet addresses for 
  266. outgoing netmail. The more generic 'AddressType' is used inside message 
  267. headers to indicate the source or destination address for netmail messages. 
  268. More information about netmail messages is outlined below.
  269.  
  270.  
  271.  
  272. CONFIG File:
  273.  
  274.        Proto: array[1..MaxProto]
  275.          of exprotocol;        { external protocols setup }
  276.  
  277. The array of protocols in the CONFIG file is now called 'Proto' instead of 
  278. 'ExProto' because it defines ALL the protocols available, not just the 
  279. external protocols. Also, the full 15 entries in this array are now used.
  280.  
  281. The 'ExProtocol' type defines a 'source' variable to indicate internal 
  282. protocols, including the new internal Zmodem protocol, as outlined above. 
  283. When Searchlight 3.0 first runs, it installs the three Searchlight 2.25 
  284. default protocols -- Xmodem, Xmodem/CRC, and Xmodem/1K -- into the first 
  285. three locations in the Proto array, bumping the existing internal protocol 
  286. definitions down three spots. Once this is accomplished, your programs can 
  287. access all of the protocols defined for a system directly in this array. 
  288. Note that the protocol number defined in USER records refers DIRECTLY to 
  289. this array now, and does not need to be checked to see if it is greater than
  290. 3 or less than 3 as in previous versions.
  291.  
  292.  
  293.        MaxRegNode: integer;    { max nodes permitted by reg number }
  294.  
  295. This variable will give you the maximum number of lines permitted by the 
  296. customer's registration license (1 for single line systems, 3 for 1 to 3 
  297. line systems, 10 for 10 line systems, and MAXINT (32767) for unlimited node 
  298. licenses). This is a read-only value. Changing it will have no effect on 
  299. Searchlight, as the value is initialized each time Searchlight starts up or 
  300. returns from a door.
  301.  
  302.  
  303.        Subboardset: string[57];     { name of active subboard list }
  304.  
  305. This variable stores the name of the text file used to select the order of 
  306. the subboards (either MAIN.SUB, or a filename used with internal command 
  307. 200).
  308.  
  309.  
  310.        AnsiDetect: boolean;             { Set if ANSI was auto-detected }
  311.        RipTest: boolean;                { Set if RIP should be tested for }
  312.        RipOn: boolean;                  { Set if RIP is available }
  313.        RipVers: array[1..3] of byte;    { Rip version }
  314.  
  315. 'AnsiDetect' is true if the LOGIN program was able to auto-sense ANSI when 
  316. the user connected. It is false otherwise. Note that 'AnsiDetect' may be 
  317. false even if the user has manually selected ANSI mode, and it may be true 
  318. even though the user has manually selected non-ANSI mode.
  319.  
  320. 'RipTest' corresponds directly to the "Enable RIP Graphics?" switch in the 
  321. CONFIG file. If true, Searchlight tries to auto-detect RIP graphics at login 
  322. and allows RIP to be selected as a terminal mode. If false, Searchlight does 
  323. not sense RIP or offer the RIP support option.
  324.  
  325. 'RipOn' is set only if Searchlight is actually in RIP graphics mode; that 
  326. is, if the current caller has a RIP compatible terminal and is running 
  327. Searchlight in RIP mode.
  328.  
  329. 'RipVers' is a three-byte value indicating the RIP terminal version that was
  330. detected on the remote end. The version number is three binary values 
  331. correspoding to a three-part version number. For example, if the RIPterm 
  332. version is "1.50.02", then the three values you would find in the RipVers 
  333. array are 1, 50 and 2, respectively (these are binary numbers, not ASCII 
  334. characters).
  335.  
  336. Searchlight will only go into RIP mode if it can read the RIP version number 
  337. from the remote terminal. Therefore, RipVers is guaranteed to contain a 
  338. valid version number if 'RipOn' is true.
  339.  
  340.  
  341.        Altmenupath: string[45];         { Alternate path to menu files }
  342.  
  343. This is the alternate menu path supported in Searchlight 3.0.
  344.  
  345.  
  346.        Protocol_Update: boolean;       { set if proto chart updated for 3.0 }
  347.  
  348. As noted above, Searchlight 3.0 makes a change to the 'Proto' array the 
  349. first time it is run. After the change is made, this variable is set to
  350. TRUE to indicate that the transfer protocols have been updated, to prevent 
  351. them from being updated again.
  352.  
  353. If you write programs that accesses the external protocols and you want your 
  354. programs to be compatible with either Searchlight 3.0 or Searchlight 2.x, 
  355. then you should check the Protocol_Update variable to determine whether the 
  356. protocol array has been updated for Searchlight 3.0 (contains both internal 
  357. and external protocols) or not.
  358.  
  359.  
  360.  
  361. USER File:
  362.  
  363. The header record of the user file is used to store the netmail setup 
  364. information from the CONFIG program, including the Sysop's real name:
  365.  
  366. type UserHeader = record       { file header info }
  367.        root: TreeRootType;       { tree root info }
  368.  
  369.        { Netmail Fields }
  370.        Origin: array[1..5]
  371.          of FidoAddressType;   { primary & alternate addresses }
  372.  
  373.        BadMail: string[25];    { Where to send bad messages }
  374.  
  375.        originate,
  376.        reply,
  377.        unlisted,
  378.        crash,
  379.        routeedit: Attribset;   { Netmail function security attributes }
  380.  
  381.        SysopName: string[25];  { Sysop's real name }
  382.        pad: array[1..4] of byte;
  383.      end;
  384.  
  385. To read or write the header record, use these new functions found in the
  386. USERS unit after opening the user file:
  387.  
  388.   Procedure ReadUserHeader (var header: userheader);
  389.   Procedure WriteUserHeader (var header: userheader);
  390.  
  391.  
  392. The user records themselves contain new fields for holding a netmail routing
  393. address and an internal protocol for message downloads:
  394.  
  395.        NetAddr: AddressType;   { netmail routing address }
  396.        InProto: ProtocolType;  { protocol for internal xfers }
  397.  
  398. Searchlight 3.0 reserves eight bytes of data in the USER record as QWK mail
  399. options. These fields aren't use internally by Searchlight; they are
  400. available for external QWK mail doors to use, as an alternative to creating
  401. a separate user file. The fields available are:
  402.  
  403.        QWKProtocol: byte;      { Protocol: 0=Zmodem 1=Ymodem 2=Xmodem }
  404.        QWKArchiveType: byte;   { Archiver: 0=ZIP }
  405.        QWKPacketNum: byte;     { Packet Number }
  406.        QWKName: byte;          { Naming Convention: 0=Suffix 1=Prefix }
  407.        QWKIndexes: byte;       { Generate Indexes: 0=Yes 1=No }
  408.        QWKFromYou: byte;       { DL Mail from you: 0=Yes 1=No }
  409.        QWKMarkNew: byte;       { Mark new messages as read: 0=Yes 1=No }
  410.        QWKPacketType: byte;    { Packet type: 0=QWK 1=Text }
  411.  
  412. Searchlight 3.0 does feature an internal command, 144, which brings up an
  413. editing screen where these options may be viewed or edited by the user. QWK
  414. doors can take advantage of the internal function rather than code their own
  415. options screens.
  416.  
  417. Since the QWK fields are available to any application, if you use these
  418. fields in a QWK door, you should stick to the definitions used here and you
  419. should be aware of the possibility that other QWK doors may be using the
  420. same areas. Therefore, do not use these areas to store information except
  421. as defined here.
  422.  
  423.  
  424.  
  425. Message Files:
  426.  
  427. The message header type adds the following field:
  428.  
  429.        Addr: AddressType;    { forward or expanded address info }
  430.  
  431. This field overlays the area used by the "FwdFrom" string in previous
  432. versions.
  433.  
  434. 'Addr' is a multipurpose field consisting of a string and a type byte. By
  435. default, the type byte is 0, and the string is either blank, or, if
  436. nonblank, contains the same value as the FwdFrom field in previous versions.
  437.  
  438. Type bytes 1 and 2 are used for netmail. Searchlight 3.0 stores netmail
  439. messages in the MAIL subboard, just like ordinary messages: only the type
  440. byte, Addr.Atype, identifies netmail messages. For incoming netmail
  441. messages, the type byte is 1. For outgoing messages, the type byte is 2. The
  442. string 'Addr.Data' contains either the source or destination fidonet address
  443. in plain text format (Zone:Net/Node or Zone:Net/Node.Point); for example,
  444. "1:107/252" or "250:500/1".
  445.  
  446. Searchlight 3.0's netmail program posts incoming netmail messages on the
  447. MAIL subboard by setting Addr.Data equal to the address from which the
  448. netmail message originated, and setting Addr.Atype to 1. Searchlight saves
  449. outgoing netmail by setting Addr.Data equal to the destination address, and
  450. Addr.Atype equal to 2. When exporting, the Netmail program searches the MAIL
  451. subboard for messages with Addr.Atype equal to 2, and exports those messages
  452. as netmail.
  453.  
  454. Searchlight 3.0 only writes outgoing messages (Addr.Atype equal to 2) on the
  455. MAIL subboard. Posting outgoing netmail messages on other subboards will have
  456. no effect. However, Searchlight 3.0's SLMAIL program does set the incoming
  457. netmail flag (Addr.Atype=1) and origin address for incoming echomail on any
  458. echomail subboard; this allows Searchlight to execute private netmail replies
  459. to public echomail messages.
  460.  
  461. The reason why Searchlight 3.0 defines netmail addresses with a plain text
  462. string and a type byte is to allow for other kinds of addresses in future
  463. versions. The only currently defined type bytes are 0, 1 and 2. Future
  464. releases may define other values for other kinds of addresses. If you wish
  465. to write applications that use the Address field for other kinds of
  466. addresses, contact Searchlight Software first before using other address
  467. type bytes.
  468.  
  469.  
  470.        Crashmail: boolean;   { set if crash mail }
  471.  
  472. This byte in the message header is set if the message is an outgoing
  473. crashmail message. It is used only for netmail messages and has no effect on
  474. local messages.
  475.  
  476.  
  477.  
  478. File Directory Files:
  479.  
  480.        Skipscan: boolean;      { skip duplicate file scan }
  481.  
  482. This variable is added to file directory files to indicate that the
  483. duplicate scan on uploads should be skipped (ie. FALSE means perform the
  484. scan, TRUE means skip the scan for that directory).
  485.  
  486.  
  487.  
  488. (c) Copyright 1993 Searchlight Software
  489.